{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Constrained MPC\n",
    "\n",
    "This notebook accompanies the paper [Learning Convex Optimization Models](https://web.stanford.edu/~boyd/papers/learning_copt_models.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cvxpy as cp\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "from tqdm.notebook import tqdm\n",
    "\n",
    "from cvxpylayers.torch import CvxpyLayer\n",
    "\n",
    "import latexify\n",
    "latexify.latexify()\n",
    "%matplotlib inline\n",
    "\n",
    "torch.set_default_dtype(torch.double)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 10\n",
    "m = 4\n",
    "val_seed = 243\n",
    "np.random.seed(0)\n",
    "torch.manual_seed(0)\n",
    "A_np = np.random.randn(n, n)\n",
    "A_np /= np.max(np.abs(np.linalg.eig(A_np)[0]))\n",
    "B_np = np.random.randn(n, m)\n",
    "\n",
    "A = torch.tensor(A_np)\n",
    "B = torch.tensor(B_np)\n",
    "weights = torch.randn(n).abs()\n",
    "weights_np = weights.numpy()\n",
    "beta = 0.5\n",
    "T = 5\n",
    "\n",
    "\n",
    "def dynamics(xt, ut):\n",
    "    return A @ xt + B @ ut + torch.randn(xt.shape)\n",
    "\n",
    "\n",
    "def stage_cost(xt, ut):\n",
    "    cost = 0.    \n",
    "    return (weights*(xt.pow(2))).sum() + ut.pow(2).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def construct_mpc_problem():\n",
    "    x = cp.Parameter(n)\n",
    "    states = [cp.Variable(n) for _ in range(T)]\n",
    "    controls = [cp.Variable(m) for _ in range(T)]\n",
    "    constraints = [states[0] == x, cp.norm(controls[0], 'inf') <= beta]\n",
    "    objective = cp.sum(cp.multiply(weights_np, cp.square(states[0]))) + cp.sum_squares(controls[0])\n",
    "    for t in range(1, T):\n",
    "        objective += cp.sum(cp.multiply(weights_np, cp.square(states[t]))) + cp.sum_squares(controls[t])\n",
    "        constraints += [states[t] == A_np @ states[t-1] + B_np @ controls[t-1]]\n",
    "        constraints += [cp.norm(controls[t], 'inf') <= beta] \n",
    "    problem = cp.Problem(cp.Minimize(objective), constraints)\n",
    "    return CvxpyLayer(problem, variables=[controls[0]], parameters=[x])\n",
    "\n",
    "mpc_policy = construct_mpc_problem()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cd79883f29324b8584bf1c8950e77fb1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "580cb2f569aa4841a4f958edf55cd0ed",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "def simulate(policy, n_iters=1000, seed=0):\n",
    "    torch.random.manual_seed(seed)\n",
    "\n",
    "    x0 = torch.randn(n)\n",
    "    states = [x0]\n",
    "    controls = []\n",
    "    costs = []\n",
    "    for t in tqdm(range(n_iters)):\n",
    "        xt = states[-1]\n",
    "        ut = policy(xt)[0]\n",
    "        controls.append(ut)\n",
    "        costs.append(stage_cost(xt, ut).item())\n",
    "        states.append(dynamics(xt, ut))\n",
    "    return states[:-1], controls, costs\n",
    "    \n",
    "states, controls, costs = simulate(mpc_policy)\n",
    "scale = 0.31622776601\n",
    "torch.manual_seed(1)\n",
    "for control in controls:\n",
    "    control.add_(scale*torch.randn(control.shape))\n",
    "    control.clamp_(-beta, beta)\n",
    "\n",
    "\n",
    "_, val_mpc_controls, val_mpc_costs = simulate(mpc_policy, seed=val_seed)\n",
    "for control in val_mpc_controls:\n",
    "    control.add_(scale*torch.randn(control.shape))\n",
    "    control.clamp_(-beta, beta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mse(preds, actual):\n",
    "    preds = torch.stack(preds, dim=0)\n",
    "    actual = torch.stack(actual, dim=0)\n",
    "    return (preds - actual).pow(2).mean(axis=1).mean(axis=0).item()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f7503cf339fe4b34ad5ad077bfcc8d01",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.06556558185607744"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "_, true_copt_controls, _ = simulate(mpc_policy, seed=val_seed)\n",
    "true_mse = mse(true_copt_controls, val_mpc_controls)\n",
    "true_mse"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def construct_agent_mpc_problem():\n",
    "    x = cp.Parameter(n)\n",
    "    weights = cp.Parameter(n, nonneg=True)\n",
    "    states = [cp.Variable(n) for _ in range(T)]\n",
    "    controls = [cp.Variable(m) for _ in range(T)]\n",
    "    constraints = [states[0] == x, cp.norm(controls[0], 'inf') <= beta]\n",
    "    objective = cp.sum(cp.multiply(weights, cp.square(states[0]))) + cp.sum_squares(controls[0])\n",
    "    for t in range(1, T):\n",
    "        objective += cp.sum(cp.multiply(weights, cp.square(states[t]))) + cp.sum_squares(controls[t])\n",
    "        constraints += [states[t] == A_np @ states[t-1] + B_np @ controls[t-1]]\n",
    "        constraints += [cp.norm(controls[t], 'inf') <= beta] \n",
    "    problem = cp.Problem(cp.Minimize(objective), constraints)\n",
    "    return CvxpyLayer(problem, variables=[controls[0]], parameters=[x, weights])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6dce7f719b34494fb497da370d7f916e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07279409400252594\n",
      "Epoch:  0\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0306e64d960948f59163ed3ea0594d16",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c2c2768861714d78a8133dba96111add",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07167800156889442\n",
      "Epoch:  1\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "25d0f6253f97429c92cf78824ad056eb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7baba3cc49b5432db0566171b1374b48",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07069272655508778\n",
      "Epoch:  2\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "261e9218c2b84ac9a015fbabfbb8e96b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7c941dd7308e4d41b3e5b29f1c2fad94",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06984502802297843\n",
      "Epoch:  3\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "809261ab29b64c76a06abd8bfef96bfd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "04fafce1acb24408b582c50ab8e9e372",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06912690526800701\n",
      "Epoch:  4\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ff8c98d3052448c0aa41bb915aad7960",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "76079b94e30746af848514f95807881d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0685306250251519\n",
      "Epoch:  5\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c33e0f5c931b4156b73c127e80d0003b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "71a2d5acc1104af7a281e769326539b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06801975410008056\n",
      "Epoch:  6\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c684cbe3387941ffbf96ab4cc5392e08",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fdca74b0611d4e188aac53a209332f14",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06758384588197658\n",
      "Epoch:  7\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "23d6fbd4eb9a44cf8a3406b0ca30ccc5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8b14224cb31d4b1bac0f0af2ac0bd88b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06722799115301124\n",
      "Epoch:  8\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "75bf6af346a64f33a448208d7992ed53",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b95bb6a652c34c74890623080c39493f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.066928942788196\n",
      "Epoch:  9\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c837d797d5d04bd997b1deca419a920b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f1ba5b3e09ad477f84b01a88c7742d6a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06668312239395516\n",
      "Epoch:  10\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "02714e70ee4b4875910bff7ef9922a46",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8e46fa5b6dd04cd09f7b680557c381ff",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06648263373470523\n",
      "Epoch:  11\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "207f147a76c94a9890b11273114f0e0a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "27192f6e7d424841b79e9e65627035cc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06632072815729703\n",
      "Epoch:  12\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1e951abdb9a64e6a87683fa0eddeac5e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e3f13ae4affb497aaa17a62c10f5a4db",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06617709680032265\n",
      "Epoch:  13\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e9aaffd8af484fa780ec3663ca07d49a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "84f606bc7b7a40dc998d27414a75bbd7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06605783824574565\n",
      "Epoch:  14\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b4b301e5eb1d4cefa55c81099ada8bf9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a707d0ec94ab41b08d5b644c91a28fca",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06595958472153375\n",
      "Epoch:  15\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4e10ae6aa53f4f1e9ecdc95a6c92c554",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2d514e9d6c4848f5bf5e6d9c4839bb05",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06587849367802624\n",
      "Epoch:  16\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "63699b312e3544f69eb814cb45a6ad33",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8439b79115a1436789a0d3f4dc9b5c74",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06581030223823804\n",
      "Epoch:  17\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8ae234024abb4e198689999ab80f1b11",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a9582043fd664d35ba8b911cf593cc44",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0657534983520345\n",
      "Epoch:  18\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "35731fc2cab143099b73a73949ba3bae",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4b5fcc05edad4297bec1cb517103afa8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0657040754837179\n",
      "Epoch:  19\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "28a65e9799e84b7b8031d6d8a4a02360",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "785ed23fe1424e63b904c2b45d61bc34",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.06566283845623234\n"
     ]
    }
   ],
   "source": [
    "adp_policy = construct_agent_mpc_problem()\n",
    "\n",
    "\n",
    "\n",
    "weights_tch = torch.ones(n, requires_grad=True)\n",
    "state_feedback_policy = lambda x: adp_policy(x, weights_tch)\n",
    "\n",
    "epochs = 20\n",
    "val_losses = []\n",
    "losses = []\n",
    "with torch.no_grad():\n",
    "    _, initial_preds, _ = simulate(state_feedback_policy, seed=val_seed)\n",
    "    val_losses.append(mse(initial_preds, val_mpc_controls))\n",
    "    print(val_losses[-1])\n",
    "opt = torch.optim.Adam([weights_tch], lr=3e-4)\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    print('Epoch: ', epoch)\n",
    "    for xt, ut in tqdm(zip(states, controls)):\n",
    "        opt.zero_grad()\n",
    "        ut_hat = adp_policy(xt, weights_tch)[0]\n",
    "        loss = (ut - ut_hat).pow(2).mean()\n",
    "        loss.backward()\n",
    "        losses.append(loss.item())\n",
    "        opt.step()\n",
    "    with torch.no_grad():\n",
    "        weights_tch.data = weights_tch.relu()\n",
    "        _, pred_ctrls, _ = simulate(state_feedback_policy, seed=val_seed)\n",
    "        val_losses.append(mse(pred_ctrls, val_mpc_controls))\n",
    "    print(val_losses[-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f51aa0d9610>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(val_losses)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ac6fed898e8344fc906372b88e64c8e2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "state_feedback_policy = lambda x: adp_policy(x, weights_tch)\n",
    "agent_states, agent_controls, agent_costs = simulate(state_feedback_policy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.54099611, 0.29342891, 2.17878938, 0.56843128, 1.08452234,\n",
       "       1.3985954 , 0.40334685, 0.83802633, 0.71925758, 0.40334352])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights_np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.24226918, 0.20930892, 1.52218022, 0.50380509, 0.65820186,\n",
       "       1.32770585, 0.53765128, 0.86057136, 0.69989866, 0.76278504])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights_tch.detach().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_weights(w, h):\n",
    "    fig = plt.figure()\n",
    "    fig.set_size_inches((w, h))\n",
    "    plt.plot(weights_tch.detach().numpy(), linestyle='-', color='k', label='learned')\n",
    "    plt.plot(weights_np, linestyle='--', color='k', label='true')\n",
    "    plt.xlabel(r'$i$')\n",
    "    plt.ylabel(r'$\\theta_i$')\n",
    "    plt.legend()\n",
    "    plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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uHjxIooVK2bipFlLSEiAq6srevTogWXLlj133+DgYNSvXx+TJ0/G559/bqKEgiTefvttbNu2DceOHcPLL7/81D5dunRBSEgILl++DCsrK6NlOXjwILZu3Ypp06bBxsbGaOcxlUuXLsHX1xf37t3Dtm3b0KhRI60jief4+++/0a5dO/z222+P/V8FBgaiW7du6NSpEzZu3GjUnwFjSk1Nxc8//4w5c+YgODgYLi4uGDFiBIYNGwZnZ+en9n/w4AFmzZqFWbNmoUiRIpgxYwaGDh36zL9DAoiOjsaRI0cye5mPHDmS2StbpkwZVKtWLfNrHR0djcDAQLi4uGDnzp2IiopC+fLlER4e/txe3qioKGRVt9na2uZ4aEPp0qUt9vvYGIzeg2ysR2HtQc7w448/5uiO9wMHDhAAp0yZYppgOZDRO5ndVGEGg4HNmzens7Nz5gppwnTCeCRmJQAAG+RJREFUw8MzexOyWslt48aNBMBffvlF1fMaDAbOnz+fEyZMULVdc3Dq1Cm+8MILdHZ2ZkhIiNZxRA4lJCRkuX3evHkEQD8/P4ubySCnN949KWPu+u7du8tVvTxKSUlhSEgIFyxYwJ49e2auOgiARYoUoZeXF4sXL55lLy8AlihRgpUrV2ajRo3YuXNnDhkyhFOmTOHChQu5adMm7t+/nxcvXmRsbKzFfV+aE8g8yJbrvffeo42NDU+cOJHtfkWLFn1sKh4tvf7666xatWq2P7h//vknAXDevHkmSiaetHXrVgLgxx9//NRrKSkpLF++PJs0aaLa+cLDwzMv8bZr187sZ2LJjcOHD9PR0ZHlypXjhQsXtI4jciljUZonF7rIWPUwp9NVau327ducOHFi5op3jRo14q+//vrcqRJv3ryZORRIr9ebxTzoBc3t27f5888/86OPPmL37t05cuRITp06lb1792a5cuUIgK6urlyyZInWUQsNKZAtWGRkJN3c3FirVq0se/gyXL16lTt27DBhsmd7+PAhW7duzdmzZz93P71ez9q1a7NixYqFYqyTORsyZAgVReHu3bufeu2bb74hAAYHB+f7PDt37qSbmxttbW05b968AtXzsXPnThYrVoyVKlXSZHo8kX+3b9/OHCP66DL3BoOBffr0IQCznvP33LlzfP/99zNXvHvnnXeynVM+JSWF3377LR0cHFi2bFnVlocWuaPX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qlWYOnUqvL29kZeXx+SYOrUBAwZgx44dujrlgIAAS4dklJ2lA6C2o1KpsG7dOsyaNQtJSUmIiYnRjY0YMQIjR45EVlYW3n33XaPHOHr0KO7evdtkcd7mzZtx+fJlHD9+nH1xiYgALFq0CGVlZejXrx9mzpzJ90aiBj169Gh2Ias1YIlFJyMiGDNmDDIyMvD111/Dz89PN1ZZWYknnnii2Zq4cePGIScnB9euXYOdXf33q4qKCvTp0wcDBgzAiRMnWFNHRERE7QJLLAhAfRuWrVu3wsnJCVOnToVardaNubi4QFEUXL9+HSUlTW9yePv2bRw5cgRTpkzRJcdA/QLA0tJSrFq1iskxERERtXtMkDuh7t27Y/PmzcjNzcXKlSsbjanVagQHB2P27Nl48OqCRqPB3LlzMWPGDN22GzduYO3atXjjjTcwePDgNomfiIiIyJyYIHdSr7/+OiZPnozly5cjPz9ft93Ozg6xsbE4efIkjhw50uhnnn76aXzwwQd4/vnndduWLVsGtVpt9bVERERERI+KNcid2L179xAQEABXV1fk5+fD0dERAFBbW4uAgACICIqKitClSxdcvHgRV65cwe9//3vdQpPz58/D398fc+bMwYYNGyz5qxARERE9NtYgUxPu7u746KOP8N133yEhIUG33d7eHmvXrsX333+P5ORkAMCGDRswevRoVFRU6PZbtGgRnJyc8Kc//anNYyciIiIyFybIndzw4cPx9ttvY926dcjMzNRtHzlyJEaOHIkff/wR1dXV+PjjjzFu3Di4u7sDALKzs5Geno64uDh4enpaKHoiIiIi02OJBaGqqgoDBw5ETU0Nvv32W7i6ugKoX7BnZ2eHzz77DOHh4Th27BhGjBgBEUFoaCiKi4tx8eJFODs7W/g3ICIiInp8LLEgo5ydnbFz505cvXoV8+fP123XtnLT3lAkLCwMAHDo0CF89dVXWLp0KZNjIiIi6nCYIBMAICgoCPHx8fjoo49w4MAB3fb79++jvLwcy5Ytg62tLdRqNd577z34+Pg0avdGRERE1FHwVtOks2TJEhw5cgRRUVEIDg7GU089BScnJ5SWlqJr164AgB07duC7777DZ599Bnt7ewtHTERERGR6JjuDrCiKm6Io4Q0P1QPbBymKEqcoSpiiKCpFUfIVRUnR348sr0uXLti1axcqKirw1ltv6W4U4ujoCBsbG9y/fx9LlixBUFAQxo8fb+FoiYiIiMzDlCUWswCcFJE0AAv1tk8AUCIiq/W2vygis0Wk6f2MyaL8/f2xYsUKpKenY9euXY3GNmzYgBs3bmD16tW8pTQRERF1WCbrYqEoyqci8nrD8xMiMvyB8UEAJgJIAaAC4Ib6xLnAwLFmoT7hRu/evQdfuXLFJDHSo6mrq8OwYcNQWFiIoqIi9O7dG6WlpejTpw9++9vf4uDBg5YOkYiIiKjVrKGLxUQRWSgiJSKiPdM829COIpIqIoEiEsgeu23P1tYWf//736HRaBAZGQmNRoPExERUVlZi5cqVlg6PiIiIyKxMmSDnKori1vC8UemEoijhAFY21B/P0htiDbKV8vb2xvr165GRkYG4uDgkJSVh+vTp6Nevn6VDIyIiIjIrU5ZYuKG+3rgM9QlyCQDtKeuFAMobtq1EfWIcCCDPUImFPt4oxHJEBGPHjsXhw4fh4OCAH374AV5eXpYOi4iIiMgkjJVYmKzNm4iUA0h9YPPJB/7UKmh4kBVTFAVbtmxBUFAQoqKimBwTERFRp8A+yNSsp59+GsXFxbC1tbV0KERERERtgnfSo4dickxERESdCRNkIiIiIiI9TJCJiIiIiPQwQSYiIiIi0sMEmYiIiIhIDxNkIiIiIiI9TJCJiIiIiPQwQSYiIiIi0mOyW02bi6IodwBcsdDLPwngroVem6wX5wUZwnlBxnBukCGcF9bhGRHxfHCj1SfIlqQoSp6h+3NT58Z5QYZwXpAxnBtkCOeFdWOJBRERERGRHibIRERERER6mCA3L9XSAZBV4rwgQzgvyBjODTKE88KKsQaZiIiIiEgPzyATEREREemxs3QA1kZRFDcAswCUACgQkRILh0RWomFuBAJQASgRkZMWDomsiKIocQBSRaTc0rGQ9VAUZRaAPAAqEUmzdDxkHRRFCdM+52eJdeIZ5KZmof5DLg3AbEsHQ1ZlAoA8EUkFsNDSwZD1UBRFBaCPpeMg66IoSjjqv0wXACiwdDxkHRrmRVlDYqyydDxkGBPkpl7QOwPEiUs6IpIqIuWKogwCP+yoMRWAYksHQVZnOABVQ0LEzxPSOglgi6IoKQA+sXQwZBgT5Oa5WToAskoTRYRnkAlA/aVSXiKlZuQ1XJHkewZpqVA/H8oBxFs4FjKCCXJTuQ21pkD95CXSaTgTtLLhkjoRAJQ11BO+ACDsYTtTp8KrCmRImIic5IkW68Y2bw9oSI4nACjD/9eOEWkXVWi/9ZfwzY20Gt43tgA40VCjTvTg50k5rzQQADSU6alQ3wzAg/PCOjFBJiIiIiLSwxILIiIiIiI9TJCJiIiIiPQwQSYiIiIi0sMEmYiIiIhIDxNkIqIORFEUlV6rSiIiagF2sSAiIiIi0sMzyEREHYSiKIMURVll6TiIiNo7JshERB1HCQCWVxARtRITZCKijqWcNchERK3DBJmIqONQASgF4GHpQIiI2jMu0iMiIiIi0sMzyEREREREepggExERERHpYYJMRERERKSHCTIRERERkR4myEREREREepggExERERHpYYJMRERERKTn/wANkmNsdmAcxQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x252 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "w, h = 10., 3.5\n",
    "plot_weights(w, h)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### NN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "class FF(torch.nn.Module):\n",
    "    def __init__(self):\n",
    "        super(FF, self).__init__()\n",
    "        self.fc1 = torch.nn.Linear(in_features=n, out_features=n)\n",
    "        self.fc2 = torch.nn.Linear(in_features=n, out_features=m)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        h1 = self.fc1(x).relu()\n",
    "        return self.fc2(h1).clamp(-beta, beta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch:  0\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "51e4854397ff4400a0e5be818cf1b4ee",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e8324064814e43a3b3df360621333b24",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.13339013895173882\n",
      "Epoch:  1\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e7aee9e2bc3c412b91c8a7d610268fd4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6ba6f492081d4f6487d50a2b0fde0606",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.10390528119402473\n",
      "Epoch:  2\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7d0385f35b794f89b97d51efc69dc7e6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c8388acc86c1426a807c8a1ad0a3984b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.09213862294157092\n",
      "Epoch:  3\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "47e928cf89bd40598520fcd07fcb3f7c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e4e945d2876b4c0d9e0710e68eb67eda",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.08514069016853261\n",
      "Epoch:  4\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9dde3f3faf724b2b9dae5a8ba4dbcbad",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4230f371a3574af5b081a31883c39c07",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0807596875666994\n",
      "Epoch:  5\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c6980366b0434d36bd22140ff96fe3fc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8c2c4a81e1544a79b94488586eb73ceb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0778797991217785\n",
      "Epoch:  6\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6347b6ed160c4f76bff787f189267554",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "24c92ae0e342487cafcbce322f44ce1c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07607216173974013\n",
      "Epoch:  7\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "160cb95a8fc740b88afc8c4c5e277577",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5f4ff9ca02d64c2bb900ed4ad114d483",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07487676839845622\n",
      "Epoch:  8\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e6edbdd535cb493180c2f6454d1fc9d6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "42a42bf8254943c49ff2f289343a2e73",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07407347601906784\n",
      "Epoch:  9\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "52c540d1959a42c7ac69326a58f0f08e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7b09c991a91445bcb724696369360de3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0734100136184846\n",
      "Epoch:  10\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ab7de0bed5094b8d8f83d99457929f85",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f9ea641006fd4fbfa445f3099eeb847f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07284999420013483\n",
      "Epoch:  11\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c5b2a8e7fa054f4d89eedfb11e9444e3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9f5caf1315424350bff1d24ea3dba010",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0724048703127036\n",
      "Epoch:  12\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6139873818de4df6982335949e7b3fc2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "12fe76cbcbd443e1828c533c053753b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07213435839031021\n",
      "Epoch:  13\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e693cd2cdf264f5b83367af5414fadc8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "354ac0473eb3474fbabaa28b30162431",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07184975112360824\n",
      "Epoch:  14\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "81a8441d1802474d96e7c6c857bf9542",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "667897ecad3248d2a800290cd8775a88",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.071651381489634\n",
      "Epoch:  15\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e741a2394ed9477db7c57064e6f1bc45",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c7d85668f9d24d6eb10de4c2cb3a22f6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0714741447227284\n",
      "Epoch:  16\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5b3304987c8a45bbb62f8cf2565243d2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f03bdc13b19843ea9c399e238049aa0a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0713748356832925\n",
      "Epoch:  17\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a70be37c60204bf3b69a041a8ea5877c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3a76425d9cfc448abf70bd5c83aead1e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0713417187845594\n",
      "Epoch:  18\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f37aa1fa1815491494f268cfe51be941",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f9abcf5a717046ad886619d65fd5fbb3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07128563678241298\n",
      "Epoch:  19\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c36d4244730e4bc3ab98ebfaf1a3e7b9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d4b07e29fcd74a09a082939189c743e9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07123416844526928\n",
      "Epoch:  20\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d80dc22e1c9945bfa7a9d191cebf465e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5ce1d6c86dbc4220b195b461ab374f86",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07122154078333232\n",
      "Epoch:  21\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d47df74618634fc68f2b526748afeaa3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4b64a5f476514f6a8bb2ffc6200cdb71",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07118896150178254\n",
      "Epoch:  22\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ad6567b3671c4b56b084b9184b49297d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3b1ee15b45a24f62ada2e0dda451452f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07117927110710451\n",
      "Epoch:  23\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5f5ee535ed5c400da49cb4c823b8f816",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "244db4b90ec9411faa93010a009d86f2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07114865851980309\n",
      "Epoch:  24\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3ca0984b5ce941a09bc9f9ee3d7be213",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9e4f55fcfb4d4a7ca601238a18ed9d7e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07116497325584153\n",
      "Epoch:  25\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "23b41f6758c2497e981aba66d0fd67c8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "03213446c2f544e9ba30f811fd5638bc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07113427132938849\n",
      "Epoch:  26\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dd254d9b01234cc085befc95b0dad94b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "940c91a7698d481095ebb1cceeba848f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07110287066699926\n",
      "Epoch:  27\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "02a5619e3c4d42019d0be461b9b23bc3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f814503e1209422fada257623192f196",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0710406496446901\n",
      "Epoch:  28\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f930f209b3c54403b823a1a51f8c06e6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bb9cd2a6c54844b9bbf8d56925380570",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07103545857891705\n",
      "Epoch:  29\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b2dad7344291413cacbbc46b6041d2b0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "917e9e2d01ed444f85883ff50a9854e7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0710133721800105\n",
      "Epoch:  30\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5e861375781543b4b675466e6bffc3b0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4ed2b906c5b5490cbc4f3228c316737d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07099922714044392\n",
      "Epoch:  31\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e60f50d96ed342bf8391c2ade26212aa",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "915574fe97774c9bb8ee372c8bfab043",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07098492775337684\n",
      "Epoch:  32\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "405fef4d5c94480baa8166ceebb853d9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b403c0f7cce246ccb6cb5f6c3cf36d75",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0709711586148846\n",
      "Epoch:  33\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e8dcb376890e43fba111946eebfd73c4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ec618f28098c46f484349be51f02222c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07094411900377406\n",
      "Epoch:  34\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0514e25643db4ec0b4ba25d986869e13",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d0ad8b3bc9534b9fbf4d7b780d985e0d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07091195379156302\n",
      "Epoch:  35\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d76d5197e5094dc997a0162c871bc35d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2a88cda143254dc784fc4d2b9546cc5d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.070914611431628\n",
      "Epoch:  36\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6a0734be93594ff6bc70ab1e47811ce0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ee34886733804a3086b16d39e04d9b27",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07091209629774217\n",
      "Epoch:  37\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "16c535ea2b1b467587ba476bc9d8f2fe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "908107eb0978455aaa3fad7f50ab2d22",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07089198430897797\n",
      "Epoch:  38\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f23b6d9e8a174ba29acb72249942ba71",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9316318f186147bfaae61c14bb9fba27",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07088898721963273\n",
      "Epoch:  39\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "881616bb7f384d6cbacf1b9c261550dc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c684f76cc81943559eb76230d36e5828",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07089111020095054\n",
      "Epoch:  40\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3a2088e868d94bbdba9235da48e4ed93",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "05d18db88d754e48a5c8fbcde742fb61",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0709051743090106\n",
      "Epoch:  41\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a0de2629abd849a59ffb86c2d87fc97a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ebd36f647f1940138562e1930e1dc42e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07088748407378355\n",
      "Epoch:  42\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fe939c096ecc41e1ab2194faf38c0808",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b65960f43894481a9380fc2f88892b44",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07086211015311936\n",
      "Epoch:  43\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e2636c57758d495f8fa5f7896b3b18a1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "40bf2d7c75f840beb70388ecae2d02a2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07085337679573742\n",
      "Epoch:  44\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9afac658113d4cbf90382fc2d42ddac6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ba09fc0caf1c452691d2ad9f9a5a5fcd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0708385819455439\n",
      "Epoch:  45\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fb2636c3f1114992b016edb9d123ed30",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7dfcad2e8d8b40a7a0b29adc2e0927b0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07085073331910073\n",
      "Epoch:  46\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "325034c19a144074b744a5f93edb9b80",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "af0182617676433ca67f4b053eb137b8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07082440141233769\n",
      "Epoch:  47\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "043edb659c40489ea2ba5361a73ef15f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7e9111050544457b9927253246dedf0c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07085590395020826\n",
      "Epoch:  48\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "722364a9c0a94e64ae0e0140711aba34",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f3ffd8a6c2ea455aa4344dfdd3807791",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07087409174516461\n",
      "Epoch:  49\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d8c128b48e134e82b5ecd7483784d7b2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2109d32860624301921f4091d7478400",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07085416433718496\n",
      "Epoch:  50\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "707e23641d73499e9d8b42045ae11c09",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "aab3b701b4434f05a3b51fb090169c32",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07086841787127852\n",
      "Epoch:  51\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "09950c8ce8bd45d897da4275ccec55de",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "45d9803afc3c4aa2a78664884ac402ca",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07088161890603432\n",
      "Epoch:  52\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "852703fe88af46f386d7bb4a91e8d073",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6d21388d406c43708f2a779e0892436b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07089523274009697\n",
      "Epoch:  53\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9c7af99ade0e4555ab6ccdee59d388a7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "54832009da424ce581808539d7d54b43",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07090870651654535\n",
      "Epoch:  54\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d26994c28b1746948f8350c4f5599e35",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9ed9f76d524d46bf8e9e1acaf551153e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0709239918697194\n",
      "Epoch:  55\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "32907265bb454829b926cfa89a7ce4e2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7176b8ef1d2942c3ab90c06abd06b68d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07095004718406688\n",
      "Epoch:  56\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d05bf6d357de48a385af8ad22c66d695",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "72aafc18f6f9401ab3bfe6a645528476",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0709760767504357\n",
      "Epoch:  57\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a475974e7d924a15826bca15f333409e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b515111858424e68849e07f170120f61",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07098092002993424\n",
      "Epoch:  58\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "98509aed434c4524bfc351325b931d8f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c549d4b70f164be6a0b654f61d3be71b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07100149287398519\n",
      "Epoch:  59\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3111d24ce8974cce987aee80d02d100e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "23b741f84c844a828db1b8172debb0e6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07099700854800414\n",
      "Epoch:  60\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "53c5458266b34fd1b0dbd57a88658732",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a369723e2b0e4690b4e3c63e4cb93fb3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07101549699666969\n",
      "Epoch:  61\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2f499d3b60504d9a984f0821f7fa76c4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f334922d08e04750b7fe410bec69dc02",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07103729849593293\n",
      "Epoch:  62\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "81ec3cc7f4384380a5a0cb3c52056d59",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6e895ba35d474ca3907d22aa06b10b3d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07105507535216904\n",
      "Epoch:  63\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cf8cdb99b15246609c8e02a6c9a33aff",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f6db2e96b199486f942af57911c3dbb8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07103927559955972\n",
      "Epoch:  64\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "804da25922ed44178565afb554f81836",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2b1885abe3b24ef99399e038c1845499",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07106614978632146\n",
      "Epoch:  65\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a0af2c7852ac42249ceab6a604b2c646",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dc555bcaab2b4e6f87efa831dbd49bbd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07109587221059785\n",
      "Epoch:  66\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "06662ca207ef45afa68b3f64c6fccc55",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6e01f2cc8b064500859ab9287f37efc8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07110370261149217\n",
      "Epoch:  67\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0be295e2bd8344e58866c6428b822156",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b5dbc6bcd58e4093a8854a34f9ee96c9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07111496417139901\n",
      "Epoch:  68\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bf512e7259214c0b92c2a06b1b1b90ed",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3fe88ae5dd1b41e1a359b1797ecc6433",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0711185663396935\n",
      "Epoch:  69\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cc8241cfa5134933a147adbbaab5b68d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "321653f4ad9b4af28bb7b2b7858d9392",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07113188794044005\n",
      "Epoch:  70\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f18debe79cc342c18ebce513e480f598",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0757d783031842a1ad0e2d677e5b07fe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07115125072462967\n",
      "Epoch:  71\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d48dfa3280a846f3b502e188642ff191",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "229a1f3ac63748609842478b42c44e0a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07117590670579312\n",
      "Epoch:  72\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d2983bb9836e40dfb0f8cbf7697cd283",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "94fa327e6c5b4c55aeec307fc5cba366",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07120024550462467\n",
      "Epoch:  73\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c3c11b724ef347b489feb3d515aa2cde",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ecb0f505e9984b1281c9b0164ad3056c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07119371334577963\n",
      "Epoch:  74\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8fabf6ed7abe41949fdef5aecfe56e94",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b8c17a756bdf440eb2c62c292f8ae00a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07120453143587269\n",
      "Epoch:  75\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f2178d0444954b98a156751fa9d8d149",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0e4a5e143d05447aa06f5f6f052bfd64",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07123343185446906\n",
      "Epoch:  76\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "abeb2412f5bd4914a80ce94ee971b52c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "166271a43c7444ac97253c941047bf16",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07121440668567504\n",
      "Epoch:  77\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "11b9bf24d9c14735bbab6fa796349a86",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0a10a812bd544fdcb7410b808194457f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07120786287464573\n",
      "Epoch:  78\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "78691064b0ad4eaca8ec33f8eb275f59",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9827458b22ae48a2ad7533fccbe4024c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07123596164989206\n",
      "Epoch:  79\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "77982bcbe8984b24b1dcb58509c3866f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0e30465dd765477eae2c5abea9435a26",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07124212266829995\n",
      "Epoch:  80\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b6fb0767753c4a0c8c881a9f781516c1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4e54098d4b494bf99eda7367d715d335",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07123680557621385\n",
      "Epoch:  81\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "14699034f45140b7b2c41263ec89b06f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "216063d9a2d7447a80675f105fbdac2a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07126244783682108\n",
      "Epoch:  82\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f6b8f0b32d90423e82eb2e623f8b95cf",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1e8f3933ac9041b5b530f5305e164a3f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07125616539049434\n",
      "Epoch:  83\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "37730f313a4f480e990bf926743838da",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "35850e0d884c41f294c5f91145e4c479",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0712678775267812\n",
      "Epoch:  84\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "33645f4be7d143f8bfe926db63a81868",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4895bb67059943439c4a73de57ce89f7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07126775805847482\n",
      "Epoch:  85\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8e90ca5dd0e344a59d2eafe012083c91",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "951b8832b9d74348b7ecdc033adacb2a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07127011578741158\n",
      "Epoch:  86\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8c3a1f6c7d484bc7b56ae86b66670dfc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0bd528cbf1344ac69083ac47ef16bd5c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07127602951288543\n",
      "Epoch:  87\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4f015eb1a5fb4ce1a744d9ead5bfccad",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8a4b78c1eb0446df9a22920c93dc0a48",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07128220620787919\n",
      "Epoch:  88\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1718103387db4acd9359b2113dfe2eef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8f1ca75f0fd745139b33cc14c7269c65",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07129736372763781\n",
      "Epoch:  89\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0ab7b13c983b48e085a857338557a233",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6300d5d3b6d74f70a21bccf8b74d9730",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07132904606273684\n",
      "Epoch:  90\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c6fc97483e314d8aa643bc611e67dc1c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c8a876c241e0463ebaa19ad96bb525d5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07133475104181279\n",
      "Epoch:  91\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ab847e26d922479396bc6450ca85b4d9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "416f1939e17a46229f567557d3f38855",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07135356375128649\n",
      "Epoch:  92\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3798ee55dc9d4045b98a7ebbb9b935b6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "82be336084d04fa1ae7ba90a9d6d379c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07133920050625871\n",
      "Epoch:  93\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "04f6a66f747946d9a3fe91f04275f10f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "0a13dd705ad146069b60d5da302fe34c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07135837453236582\n",
      "Epoch:  94\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8b9e7b3d7e314fc3874f9e19a7b60798",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "51d8fa6a60884d109692f2a32c085301",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07137029098643333\n",
      "Epoch:  95\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "564986d25f5d4e0394deeb2e58cb9738",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "79f57e66bb2f445f8bf8b9f7ee6061cc",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07136551776936782\n",
      "Epoch:  96\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c96b4a4a18d345f2855b2fc576a38a28",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "32248cb37cd440a8b161a29ed7d65c63",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07135427087345948\n",
      "Epoch:  97\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "47687c209b074cf4af30e2f13de3ffa3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "96eaec9805ab4b4899940afcb7f2c6d0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.0713538413334864\n",
      "Epoch:  98\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7f0fa5daeab041588dc1e9d6da2e290e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f37ec0cce3e54caab845ac86635f5671",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07137167011417596\n",
      "Epoch:  99\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9ffef284b89a4e048e614406560ad704",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "eee83774bc194c689ed347cd4d85c9bf",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "HBox(children=(FloatProgress(value=0.0, max=1000.0), HTML(value='')))"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "0.07135701675480081\n"
     ]
    }
   ],
   "source": [
    "torch.random.manual_seed(0)\n",
    "ff = FF()\n",
    "\n",
    "\n",
    "epochs = 100\n",
    "nn_losses = []\n",
    "val_nn_losses = []\n",
    "opt = torch.optim.Adam(ff.parameters(), lr=3e-4)\n",
    "for epoch in range(epochs):\n",
    "    print('Epoch: ', epoch)\n",
    "    for xt, ut in tqdm(zip(states, controls)):\n",
    "        opt.zero_grad()\n",
    "        ut_hat = ff(xt)\n",
    "        loss = (ut - ut_hat).pow(2).mean()\n",
    "        loss.backward()\n",
    "        nn_losses.append(loss.item())\n",
    "        opt.step()\n",
    "    _, val_preds, _ = simulate(lambda x: [ff(x)], seed=val_seed)\n",
    "    with torch.no_grad():\n",
    "        val_nn_losses.append(mse(val_preds, val_mpc_controls))\n",
    "    print(val_nn_losses[-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.06566283845623234"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_losses[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.07135701675480081"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_nn_losses[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f517fa0d640>]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(val_nn_losses)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_losses(w, h):\n",
    "    fig = plt.figure()\n",
    "    fig.set_size_inches((w, h))\n",
    "    plt.axhline(val_nn_losses[-1], color='k', linestyle='-.', label='NN')    \n",
    "    plt.plot(np.arange(len(val_losses)) + 1, val_losses, color='k', label='COM')\n",
    "    plt.axhline(true_mse, color='k', linestyle='--', label='true')\n",
    "    plt.xticks([1, 5, 10, 15, 20])\n",
    "    plt.xlabel('iteration')\n",
    "    plt.ylabel('validation loss')\n",
    "    plt.legend(loc='upper right')\n",
    "    plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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DRqknTt3Ol0SAAAAyhC0gGyMcRljkn1LTHntvsflxpgFxpg03/Y4Y8x9xpjEYNVTFw0cOFAej0e5ubkaNGiQtm/f7nRJAAAAKCGYPcipkjzW2gxJkypo91prh1prR0paICnF1zajxHENUt++fZWZmak//vhDgwcP1tatW50uCQAAAAGCGZAvstYWzcERU167tTZbkowxidZaj7U23VqbZ4yJk5QdxHrqrLi4OK1cuVIFBQUaPHiwvv76a6dLAgAAgI8jY5CNMS5JJS8pHGWtLbcH2RiTaozJMsZk7d27t2YLrAU9e/bUqlWrFBISovj4eH3xxRdOlwQAAAAFNyCv8wVfSfJW0p4oyT/jszEmWdKTgWOXS/L1NLutte6GMpdwt27dtGrVKoWHh+uyyy5TfZuZAwAAoCEKZkBOl5TiC7tFF98llmz37RspKVcqHGohabykmb7HRqVz5876+OOP1bJlSyUkJOjTTz91uiQAAABHeL1epaenO11G8G4U4htnXPITeXyP6SX2TQ9Y9wTs1yh17NhRq1at0pAhQzR06FAtXbpUl156qdNlAQAAlCk+Pr5UW0pKiu666y4dOnRIV111VantY8eO1dixY7Vv3z61bt26zNfNzs7W+vXr5fV6lZ2dreXLlys2NlYxMTFat26dJk+erJEjR2r58uXyer3yeDz+967ODUHKwzzIdcS5556rjz/+WGeffbauuOIKZWZmOl0SAABArUpMTPQH4sTERLlcLt13331KTCycCdjlcvlvMT1p0iS53W7FxMRo/vz5Qa2DW03XIe3atdPKlSuVmJiopKQkLVq0SMOGDXO6LAAAgGJWrlxZ7raIiIgKt5fXexzI6/UqMjJSUVFRklSsdzg3N9e/HhcXV3mx1UAPch3Ttm1bffTRRzr//PN17bXXasmSJU6XBAAAUCtcLpdycnKUl5enrKysUjdV83g88nq98nq9mj59utLT05WdnS2v11vOK1aPsdYG9QVrg9vttg19xofffvtNw4YN04YNG/TGG29o9OjRTpcEAAAaqc2bN6tbt25Ol3HKSn4OY8x6a6275H70INdRrVq10vLlyzVgwADdeOONevzxx1Uff5gBAACobwjIdVjLli21bNkyjRkzRlOnTtW4ceNUUFDgdFkAAAANGhfp1XFhYWGaPXu2OnfurIceekg7d+7UwoULFRkZ6XRpAACgETl8+LDCw8NljHG6lJNmrVV+fn6V9ycg1wPGGD344IOKjY3VrbfeqgEDBui9995TbGys06UBAIBG4KyzztJPP/2ko0ePOl1KtTVr1kxnnXVWlfblIr16ZvXq1RoxYoRCQkK0aNEiDRw40OmSAAAA6iUu0msgLr30Un366adq1aqVEhISNG/ePKdLAgAAaFAIyPVQ586dtXbtWvXt21d/+ctf9MQTTzDDBQAAQJDUyyEWLVq0sH369Klwn6SkJN17772SCu8XHnj/7+Tk5Erfo+T+99xzj6655hpt3bpV48ePr/T4kvtPmzZNAwYM0Jo1a/TAAw9UenzJ/dPS0tS1a1ctWbJEzz77rCTpxIkT2rp1q3799Ve1bdtWXbp0UUhI4c88JffPyMhQ69at9frrr+v111+v9P1L7l90R5xnnnlG7777bqXHB+6/du1aLVy4UJI0efJkrV27tsJjo6Kiiu2fk5Oj9PR0SVJqaqq2bdtW4fFdunQptn9UVJSefPJJSdL111+vnJycCo/v379/sf379+9f7FyqTGM49yrCuce5x7nHuce5x7kn1Y9zb9WqVWUOseAivXosJCRE559/vpo3b66dO3fqyJEjuuCCC9SsWTOnSwMAAKi36mUPcmO+SK88c+fO1a233qrY2Fi99957iomJcbokAACAOo2L9Bq4MWPGyOPx6Ndff1W/fv20Zs0ap0sCAAColwjIDcigQYO0du1auVwuDRkyRG+99ZbTJQEAANQ7BOQGpkuXLlq7dq0uuugi3XDDDZo2bRozXAAAAJwEAnID1Lp1a3k8Ht1444365z//qdtuu00FBQVOlwUAAFAvMItFAxUWFqY5c+aoU6dOeuSRR7Rz505lZGSoVatWTpcGAABQpwUtIBtjXJISfU+zrbXestolxUkaLylPUq6kSb7tkdba9GDVA8kYo4cfflgxMTG6/fbbNWDAAGa4AAAAqEQwh1ikSvJYazNUGHrLa/daa4daa0dKWmCtzVNhcHYFsRYEuPnmm7V8+XL98ssvuvjii/Xpp586XRIAAECdFcyAfJEv7EpSTHnt1tpsSTLGJFprPUF8f1Rg8ODBWrt2rc444wxddtllWrBggdMlAQAA1EmOXKTnG3ZxUj3GxphUY0yWMSZr7969NVRZw9a1a1d9+umn6tOnj1JSUvTUU08xwwUAAEAJwQzI63zBV5K8lbQnqnAMcpVZa9OttW5rrTs6OvoUS228ima4GD16tCZPnqw77rhDR48edbosAACAOiOYs1ikS0oxxuRKSvOFYnfJdt++kSoeohMlXWSMiSm6uA81Jzw8XHPnzlWnTp306KOP6vvvv1dGRoZcLoaBAwAAmPr4K3a3222zsrKcLqNBmD17tm6//XZ16tRJ7733njp27Oh0SQAAALXCGLPeWusu2c6NQhq5m2++WcuWLdOePXt08cUX67PPPnO6JAAAAEcRkKH4+HitXbtWp59+uuLj45WRkeF0SQAAAI4hIEPSf2a4iIuL08iRIzVjxgxmuAAAAI0SARl+0dHRyszM1A033KBJkyZpzJgxOnDggNNlAQAA1CoCMooJDw/Xm2++qSeeeELz5s1TXFycsrOznS4LAACg1hCQUUpISIgeeOABrVq1Svn5+erfv7/++7//myEXAACgUSAgo1yXXHKJNm7cqGHDhunvf/+7rrvuOuXm5jpdFgAAQI0iIKNCUVFRWrx4sZ577jktXbpUvXv31r///W+nywIAAKgxBGRUyhijv//971q7dq1CQ0MVHx+vJ554QsePH3e6NAAAgKAjIKPK+vTpo+zsbKWkpGjKlCkaNmyY9uzZ43RZAAAAQUVAxkk544wz9Oabb2rWrFlas2aNevXqpeXLlztdFgAAQNAQkHHSjDG67bbbtG7dOkVHR2vYsGF64IEHdPToUadLAwAAOGUEZFRb9+7d9fnnn+uOO+7Qk08+qfj4eO3cudPpsgAAAE4JARmnJCIiQmlpaZo3b542bdqk3r17a9GiRU6XBQAAUG0EZATFqFGjtGHDBnXq1EnXXXed/va3vyk/P9/psgAAAE4aARlBExsbq08++UR33323XnjhBfXv31/btm1zuiwAAICTQkBGUIWGhuq//uu/tGTJEv3444+Ki4vT3LlznS4LAACgygjIqBFJSUnauHGj+vTpo5tuuknjxo3TwYMHnS4LAACgUlUKyMaYe40xHYwx840xf67potAwnH322crMzNSDDz6oN954Q263W19++aXTZQEAAFSoqj3ImZLGS3pSUl5ZOxhjXMaYZN8SU16773G5MWaBMSatvOPQMDRt2lSPPPKIMjMztX//fvXt21cvv/yyrLVOlwYAAFCmqgbkSElG0m+ShpazT6okj7U2Q9KkCtq9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27Zt9fDDD+uHH37QrFmzVFBQoJtvvlkdOnTQtGnTGKcMAEA1VLUHGUAdFh4erttuu01fffWVPvjgA/Xs2VP//Oc/dc455+iuu+7Stm3bnC4RAIB6g4AMNCDGGA0bNkwffvihNm3apL/85S965ZVX1LVrV1177bVauXIl45QBAKhE0AKyMcZljEn2LTEVtRtjUo0xccaYZN/zRN8SF6x6gMauR48eeuWVV/TDDz/owQcf1Nq1a3XZZZepT58+jFMGAKACwexBTpXksdZmSJpUXrsvFHuttdmSPL7nudZajyR3EOsBoMJxyo888oh++OEHzZw5U/n5+br55pvVvn173X333fryyy+dLhEAgDolmAH5Imttnm89poL2oZJifMHYLckjaaYxJk3S/PJe3NfrnGWMydq7d28QywYah+bNm+v222/3j1OOj4/X//zP/6hXr17q06ePXnjhBeXm5jpdJgAAjnNqDHJWQE9zjO8xT9Lk8g6w1qZba93WWnd0dHQtlQk0PCEhIRo2bJgWLFig3bt36/nnn9eJEyf0t7/9TWeddZZSUlL0wQcf6Pjx406XCgCAI4IZkNcZY1y+dW8F7dtLHJdorfVYaycJQK1q3bq1/t//+3/asGGDNmzYoDvvvFMrVqzQlVdeqfPOO08PPPAAM2AAABodE6wr2n0hOEVSrgqDsFeFQyiyymgvep7ne4zxtUf6xiJXyO1226ysrKDUDaC4I0eO6N1339Wrr76qDz74QCdOnNDAgQN16623auTIkWrRooXTJQIAEBTGmPXW2lLXwAUtINcmAjJQO3bv3q05c+botdde09atWxUREaGRI0dq3LhxGjRokIwxTpcIAEC1EZABVJu1Vp9++qlee+01zZs3TwcOHFBMTIzGjh2rW265Reeee67TJQIAcNLKC8jcKARApYwx6t+/v9LT0/Xzzz9r9uzZOu+88/Tggw+qQ4cOuvzyy/V///d/Onz4sNOlAgBwygjIAE7KaaedpptuukkrVqyQ1+vV1KlTtW3bNo0ePVpnnXWWJkyYoM8//5w79gEA6i2GWAA4ZSdOnNBHH32k1157TQsXLlR+fr66d++ucePGacyYMWrbtq3TJQIAUApDLADUmJCQECUkJGju3Lnas2eP0tLS1KJFC917771q3769hg8frkWLFuno0aNOlwoAQKXoQQZQYzZv3qzXXntNc+bM0Z49exQdHa1Ro0Zp+PDhGjx4sJo1a+Z0iQCARoxZLAA45tixY/rggw/02muvaenSpcrPz5fL5dJVV12l4cOH64orrtAZZ5zhdJkAgEaGgAygTjh06JCWL1+uRYsWacmSJcrJyVFoaKiGDBmi4cOH69prr1W7du2cLhMA0AgQkAHUOcePH9eaNWu0aNEiLV68WNu3F96Jvm/fvho+fLhGjBihbt26cUMSAECNICADqNOstfrmm2/8YXndunWSpE6dOvnDcv/+/dWkSROHKwUANBQEZAD1yk8//aR33nlHixcv1ooVK3T06GASLx0AAA/NSURBVFFFR0crKSlJI0aMUGJioiIiIpwuEwBQjxGQAdRbv//+u95//30tXrxYS5cu1f79+9W8eXNdfvnlGjFihJKSktS6dWunywQA1DMEZAANQkFBgT7++GP/UIxdu3YpJCREAwcO1IgRIzR8+HDFxsY6XSYAoB4gIANocKy12rBhgz8sf/nll5Kk7t27+8Nynz59FBLCPZEAAKURkAE0eDt27NDixYu1ePFirV69WsePH1e7du00fPhwXX311Ro0aJBatGjhdJkAgDqCgAygUcnJydHSpUu1aNEiffjhhzp48KCaNm2qvn37asiQIUpISFD//v0VFhbmdKkAAIcQkAE0Wvn5+VqzZo0yMzOVmZmpdevW6cSJEwoPD9cll1yihIQEJSQkKC4ujmnkAKARISADgM/+/fv18ccfKzMzUytWrNCmTZskSS1btlR8fLwSEhI0ZMgQXXDBBdykBAAaMAIyAJTjl19+0UcffaQVK1YoMzNTXq9XknTmmWdqyJAh/iEZHTp0cLZQAEBQ1XhANsa4JCX6nmZba73ltRtjUiVlSYrxtY+XlCcp11o7vrL3IiADqEnff/+9PyyvWLFCe/bskSTFxMT4w/KQIUPUpk0bhysFAJyK2gjI90lKt9bmGWPSioJuyXZJyyXlWWs9vvAcY63N9u2baK31VPZeBGQAtcVaq82bN/vHL69cuVL79++XJPXo0cM/fnnQoEFq2bKlw9UCAE5GbQTkBdbakb715dbaoWW1S/JKWi8pV76g7NtWYTj29TqnStK5557bZ+fOnUGpGwBOxvHjx5Wdne3vXf73v/+tw4cPq0mTJnK73f7e5QEDBqh58+ZOlwsAqEBdC8hp1trsov2KhmFYazOq8l70IAOoK44cOaK1a9f6h2R8/vnnOnbsmMLCwjRw4EANHjxY/fr100UXXaTIyEinywUABCgvIDcN4nusM8a4rLV5KgzB5bVvL+PYRBWOQQaAeiUsLEzx8fGKj4/Xo48+qgMHDmj16tX+IRkPP/ywijoiOnfurH79+qlfv37q27evevfurdDQUIc/AQCgpGBfpJeiwqETXt/iVuHFeCXbi54XjUVOlZRVNBa5MvQgA6gvfv/9d61fv16fffaZf/n5558lSaGhobrwwguLhebY2FimlgOAWsI0bwBQB1hrtWvXLn3++ef+wJyVlaVDhw5JkqKiotS3b19/YO7bt6+ioqIcrhoAGiYCMgDUUceOHdPXX39dLDR//fXX/qEZnTp18gfmfv36qXfv3twiGwCCgIAMAPXIgQMHlJWVVSw07969W1Lh0IzevXsXC82dOnViaAYAnCQCMgDUc7t27dJnn33mD81ZWVk6ePCgJCkyMtI/JKNfv35yu93cyAQAKkFABoAG5tixY/rmm2+Kheavv/5aJ06ckCS1adNGPXv2VI8ePdSzZ0/17NlT3bt312mnneZw5QBQNxCQAaAR+OOPP5SVlaUNGzboq6++0qZNm/T111/7LwI0xqhjx47+wFwUnrt06aKmTYM58ycA1H0EZABopE6cOKEdO3Zo06ZN/uWrr77Stm3bdPz4cUmF45q7detWrLe5R48eOueccxjbDKDBIiADAIrJz8/Xli1b/D3NRcuuXbv8+7Rs2VI9evQoFpx79uypVq1aOVg5AAQHARkAUCV5eXn+0BwYnvPy/nPD03bt2pUaptGtWzc1b97cwcoB4OQQkAEA1Wat1e7du4sN0di0aZO++eYbHTlyRJIUEhKimJgYde7cWZ06dSq2dOjQgdtqA6hzCMgAgKA7duyYtm/f7g/Omzdv1vbt2/Xtt9/qwIED/v1CQkJ03nnn+QNzYIju2LGjwsPDHfwUABorAjIAoNZYa7Vv3z599913+vbbb/Xdd9/5l2+//bbYcA1jjM4555xSvc6dOnVSbGysIiIiHPwkABoyAjIAoM7Izc0tFpoDw/O+ffuK7du+fftyw3OLFi0c+gQAGgICMgCgXsjLy9P27dvLDNB79uwptm/btm39Ybljx47q0KGDfzn77LOZ2xlAhQjIAIB6748//igVnr/99ltt375dP/30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\n",
      "text/plain": [
       "<Figure size 720x252 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "w, h = 10, 3.5\n",
    "plot_losses(w, h)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x252 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "import latexify\n",
    "latexify.latexify()\n",
    "\n",
    "w = 10\n",
    "h = 3.5\n",
    "\n",
    "fig, ax = plt.subplots(1, 2)\n",
    "fig.set_size_inches(w, h)\n",
    "\n",
    "ax[1].plot(weights_tch.detach().numpy(), linestyle='-', color='k', label='learned')\n",
    "ax[1].plot(weights_np, linestyle='--', color='k', label='true')\n",
    "ax[1].set_xlabel(r'$i$')\n",
    "ax[1].set_ylabel(r'$\\theta_i$')\n",
    "ax[1].set_xticks([0, 2,4, 6, 8])\n",
    "ax[1].legend()\n",
    "    \n",
    "ax[0].axhline(val_nn_losses[-1], color='k', linestyle='-.', label='NN')\n",
    "ax[0].plot(np.arange(len(val_losses)) + 1, val_losses, color='k', label='COM')\n",
    "ax[0].axhline(true_mse, color='k', linestyle='--', label='true')\n",
    "ax[0].set_xticks([1, 5, 10, 15, 20])\n",
    "ax[0].set_xlabel('iteration')\n",
    "ax[0].set_ylabel('validation loss')\n",
    "ax[0].legend(loc='upper right')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
